import install from "./install";
import createMatcher from './create-matcher'
import HashHistory from "./history/hash";
import HTML5History from "./history/html5";
export default class VueRouter {
  //在创建VueRouter对象的时候，会传递选项
  constructor(options) {
    //获取routes选项，该选项中定义路由规则
    this._routers = options.routes || [];
    this.matcher = createMatcher(this._routers)
    //获取传递过来的选项中的mode,mode中决定了用户设置的路由的形式。
    //这里给VueRouter添加了mode属性
    const mode = this.mode = options.mode || 'hash'
    switch(mode){
      case 'hash':
        this.history = new HashHistory(this)
        break 
      case 'history':
        this.history = new HTML5History(this)
        break 
      default:
        throw new Error("mode error");
    }
  }
  // 注册路由变化的事件。该方法的参数是一个Vue实例，后期完善
   // 注册路由变化的事件(初始化事件监听器，监听路由地址的变化)。
  init(Vue) {
    const history = this.history;
    const setUpListener = () => {
      history.setUpListener();
    };
    history.transitionTo(
      history.getCurrentLocation(),
      //如果直接history.setUpListener
      //这样的话setUpListener里面的this会有问题。
      setUpListener // 完成hashchange时间的注册
    );
    history.listen((route)=>{
      Vue._route = route
    })
  }
  // init(Vue) {}
}
VueRouter.install = install